package Stream流.Text;

import java.lang.reflect.AccessibleObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;
import java.util.stream.Stream;

/**
 * 现在有两个ArrayList集合，分别存储6名男演员的名字和年龄以及6名女演员的名字和年龄。
 * 姓名和年龄中间用逗号隔开。
 * 比如: 张三,23
 * 要求完成如下的操作:
 * 1，男演员只要名字为3个字的前两人
 * 2，女演员只要姓杨的，并且不要第一个
 * 3，把过滤后的男演员姓名和女演员姓名合并到一起
 * 4，将上一步的演员姓名封装成Actor对象。
 * 5，将所有的演员对象都保存到List集合中备注:演员类Actor，属性有: name，age
 * 男演员:"蔡坤坤，24"，"叶勋咸,23"，"刘不甜,22"，"吴签,24"，"谷嘉,30"，"肖梁梁,27"
 * 女演员:"赵小颖,35”，，"杨颖,36"，"高元元,43"，"张天天,31"，"刘诗,35"，"杨小幂,33"
 */
public class Text2 {
    public static void main(String[] args) {
        //男演员集合
        ArrayList<String> list1 = new ArrayList<String>();
        //女演员集合
        ArrayList<String> list2 = new ArrayList<String>();

        Collections.addAll(list1,"蔡坤坤,24","叶勋咸,23","刘不甜,22","吴签,24","谷嘉,30","肖梁梁,27");
        Collections.addAll(list2,"赵小颖,35","杨颖,36","高元元,43","张天天,31","刘诗,35","杨小幂,33");
        System.out.println(list1);
        System.out.println(list2);
        // 1，男演员只要名字为3个字的前两人
        list1.stream().filter(s -> s.split(",")[0].length()==3).limit(2).forEach(System.out::println);
        //2，女演员只要姓杨的，并且不要第一个
        System.out.println("================================================");
        list2.stream().filter(s -> s.split(",")[0].startsWith("杨")).skip(1).forEach(System.out::println);
        //3，把过滤后的男演员姓名和女演员合并到一起//4.将上一步的演员姓名封装成Actor对象。
        System.out.println("================================================");
        Stream.concat(list1.stream().filter(s -> s.split(",")[0].length()==3).limit(2)
                ,list2.stream().filter(s -> s.split(",")[0].startsWith("杨")).skip(1))
                .map(new Function<String, Actor>() {
                    @Override
                    public Actor apply(String s) {
                        return new Actor(s.split(",")[0],Integer.parseInt(s.split(",")[1]));
                    }
                }).forEach(s-> System.out.println(s.getName() +"****"+ s.getAge()));

            // 5，将所有的演员对象都保存到List集合中备注:演员类Actor，属性有: name，age
        System.out.println("================================================");

        Stream.concat(list1.stream(),list2.stream()).map(new Function<String, Actor>() {
            @Override
            public Actor apply(String s) {
                return new Actor(s.split(",")[0],Integer.parseInt(s.split(",")[1]));
            }
        }).forEach(s-> System.out.println(s.getName() +"****"+ s.getAge()));
        //简化版:
        Stream.concat(list1.stream(),list2.stream()).map(s ->new Actor(s.split(",")[0],Integer.parseInt(s.split(",")[1]))).forEach(s-> System.out.println(s.toString()));
    }
}
class Actor{
    private String name;
    private int age;

    public Actor() {
    }

    public Actor(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Actor{name = " + name + ", age = " + age + "}";
    }
}
